home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / OFDb - IMDb (DE).ifs < prev    next >
Text File  |  2005-04-03  |  15KB  |  488 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Fabian Filipczyk<FFJaro@gmx.de>, Bad Joker<badjoker@gmx.net>, VisualMAx<visualmax@gmail.com>
  8. Title=OFDb - IMDb
  9. Description=Combined OFDb / IMDb (DE)|Deutscher Titel / Kleines Bild von OFDb|Rest IMDb (DE)
  10. Site=www.ofdb.de
  11. Language=DE
  12. Version=
  13. Requires=3.5.0
  14. Comments=Import from Online-Filmdatenbank(OFDb) http://www.ofdb.de|and|Internet Movie Database (IMDb) http://us.imdb.com
  15. License=This program is free software; you can redistribute it and/or modify it under the|terms of the GNU General Public License as published by the Free Software Foundation;|either version 2 of the License, or (at your option) any later version.
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. (***************************************************
  23.  *                                                 *
  24.  *  (c) 2002 Fabian Filipczyk    FFJaro@gmx.de     *
  25.  *                                                 *
  26.  *     Modified by Bad Joker    badjoker@gmx.net   *
  27.  *                                                 *
  28.  *     @16.10.2004                                 *
  29.  *     Modified by VisualMAx    (at)gmail.com      *
  30.  *                                                 *
  31.  *     @19.12.2004                                 *
  32.  *     Modified by u.pollaehne  (at)web.de         *
  33.  *                                                 *
  34.  ***************************************************)
  35.  
  36. program OFDB_DE;
  37. var
  38.   MovieName, IMDbURL, GerIMDbDURL: string;
  39.  
  40. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  41. var
  42.   i: Integer;
  43. begin
  44.   result := -1;
  45.   if StartAt < 0 then
  46.     StartAt := 0;
  47.   for i := StartAt to List.Count-1 do
  48.     if Pos(Pattern, List.GetString(i)) <> 0 then
  49.     begin
  50.       result := i;
  51.       Break;
  52.     end;
  53. end;
  54.  
  55. procedure AnalysePage(Address: string);
  56. var
  57.   Page: TStringList;
  58.   LineNr: Integer;
  59. begin
  60.   Page := TStringList.Create;
  61.   Page.Text := GetPage(Address);
  62.   if pos('<title>OFDb - Übersicht der Filmdaten</title>', Page.Text) > 0 then
  63.   begin
  64.     AnalyseOFDBPage(Page)
  65.     AnalyseIMDBDPage(Page)
  66.     AnalyseIMDBPage(Page)
  67.   end else
  68.   begin
  69.     if pos('Titel:</b><br><br><b>ò</b> <i>Keine Ergebnisse</i>', Page.Text) > 0 then
  70.     begin
  71.       ShowMessage('Keine Ergebnisse unter dem Titel zu finden, bitte den Titel des Filmes Σndern!');
  72.       if (MovieName <> '') or Input('OFDb', 'Bitte einen alternativen Titel eingeben :', MovieName) then
  73.         begin
  74.         AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
  75.         end;
  76.   end else
  77.   begin
  78.     PickTreeClear;
  79.     LineNr := FindLine('<b>Titel:</b>', Page, 0);
  80.     if LineNr > 0 then
  81.     begin PickTreeAdd('Filme:', '');
  82.       AddMoviesTitles(Page, LineNr);
  83.       if PickTreeExec(Address) then
  84.          AnalysePage(Address);
  85.     end;
  86.     end;
  87.   end;
  88.   Page.Free;
  89. end;
  90.  
  91. procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  92. var
  93.   Line: string;
  94.   MovieTitle, MovieAddress: string;
  95.   StartPos, EndPos: Integer;
  96. begin
  97.   Line := Page.GetString(LineNr);
  98.   repeat
  99.     StartPos := pos('<a href=''view.php?page=film&fid=', Line);
  100.     if StartPos > 0 then
  101.     begin
  102.       Delete(Line, 1, StartPos + 8);
  103.       MovieAddress := copy(Line, 1, pos('''>', Line) - 1);
  104.       StartPos := pos('''>', Line) +2;
  105.       MovieTitle := copy(Line, StartPos, pos('</a>', Line) - StartPos);
  106.       HTMLRemoveTags(MovieTitle);
  107.       PickTreeAdd(MovieTitle , 'http://www.ofdb.de/' + MovieAddress);
  108.     end;
  109.   until (StartPos < 1);
  110. end;
  111.  
  112. procedure AnalyseOFDBPage(Page: TStringList);
  113. var
  114.   Line, Temp, Value: string;
  115.   LineNr, BeginPos, EndPos: Integer;
  116. begin
  117.  
  118.   // Get IMDb URL + Set german IMDb URLs
  119.   begin
  120.     LineNr :=Findline('http://german.imdb.com/Title?', Page, 0);
  121.     Line := Page.GetString(LineNr);
  122.     BeginPos := pos('http://german.imdb.com/Title?', Line);
  123.     EndPos := pos('" target', Line);
  124.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  125.     SetField(fieldURL, Value);
  126.     BeginPos := pos('Title?', Line)+6;
  127.     EndPos := pos('" target', Line);
  128.     Temp := copy(Line, BeginPos, EndPos - BeginPos);
  129.     Value := ('http://german.imdb.com/Details?' + Temp);
  130.     GerIMDbDURL := Value;
  131.     Value := ('http://us.imdb.com/Title?' + Temp);
  132.     IMDbURL := Value;
  133.   end;
  134.  
  135.   // Original & Translated Title
  136.   LineNr := FindLine('Originaltitel:</font>', Page, 0);
  137.   if LineNr > -1 then
  138.   begin
  139.     LineNr:= LineNr+2;
  140.     Line := Page.GetString(LineNr);
  141.     BeginPos := pos('class="Daten"><b>', Line) + 17;
  142.     EndPos := pos('</b></font>', Line);
  143.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  144.     SetField(fieldOriginalTitle, Value);
  145.     LineNr := Findline('sans-serif" size="3"><b>', Page, 0);
  146.     if LineNr > -1 then
  147.     begin
  148.       Line:= Page.GetString(LineNr);
  149.       BeginPos := pos('sans-serif" size="3"><b>',Line) +24;
  150.       Endpos :=  pos('</b></font></td>',Line);
  151.       Value := copy(Line,BeginPos, Endpos-Beginpos);
  152.       SetField(fieldTranslatedTitle,Value);
  153.     end;
  154.   end;
  155.  
  156.   // Picture
  157.   LineNr := FindLine('images/film/', Page, 0);
  158.   if LineNr > -1 then
  159.   begin
  160.     Line := Page.GetString(LineNr);
  161.     BeginPos := pos('<img src="', Line) + 10;
  162.     if BeginPos > 10 then
  163.     begin
  164.       EndPos := pos(' alt=', Line)-1;
  165.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  166.       Temp := 'http://www.ofdb.de/'+Value;
  167.       GetPicture(Temp);
  168.     end;
  169.   end;
  170.  
  171.   // Description
  172.   LineNr := Findline('<b>Inhalt:</b>', Page, 0);
  173.   if LineNr > -1 then
  174.   begin
  175.     LineNr := Findline('<a href="view.php?page=inhalt', Page, 0);
  176.     Line := Page.GetString(LineNr);
  177.     BeginPos := pos('<a href="view.php?page=inhalt', Line)+9;
  178.     EndPos := pos('"><b>[mehr]', Line);
  179.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  180.     GetDescriptions(Value);
  181.   end;
  182. end;
  183.  
  184. procedure GetDescriptions(Address: string);
  185. var
  186.   Line, Temp, Value: string;
  187.   LineNr, BeginPos, EndPos: Integer;
  188.   Page: TStringList;
  189.  
  190. begin
  191.   Temp:= '';
  192.   Page := TStringList.Create;
  193.   Page.Text := GetPage('http://www.ofdb.de/' + Address);
  194.   LineNr := FindLine('Eine Inhaltsangabe von', Page, 0);
  195.   if LineNr > -1 then
  196.   begin
  197.     Line := Page.GetString(LineNr);
  198.     BeginPos := pos('</a></b><br><br>', Line) + 16;
  199.     while (pos('<br />', Line) >0) do
  200.          begin
  201.            EndPos := pos('<br />', Line);
  202.            Temp := Temp + copy(Line, BeginPos, EndPos - BeginPos);
  203.            LineNr:=LineNr+1;
  204.            Line:=Page.GetString(LineNr);
  205.            BeginPos:=1;
  206.          end;   
  207.     EndPos := pos('</font></p>', Line);
  208.     Temp:= Temp +  copy(Line, BeginPos, EndPos - BeginPos);
  209.     Value:= Temp;
  210.     SetField(fieldDescription, Value);
  211.   end;
  212.   Page.Free;
  213. end;
  214.  
  215. procedure AnalyseIMDBDPage(Page: TStringList);
  216. var
  217.   Line, Value, Value2, FullValue, GerTitle, Ger, Temp: string;
  218.   BeginPos, EndPos, LineNr, TempPos: Integer;
  219. begin
  220.  
  221.   Page.Text := GetPage(GerIMDbDURL);
  222.  
  223.   //Producer
  224.   LineNr := FindLine('<a name="producers"', Page, 0);
  225.   if LineNr > -1 then
  226.   begin
  227.     FullValue := '';
  228.     EndPos := 0;
  229.     Line := Page.GetString(LineNr);
  230.     BeginPos := Pos('<b class="blackcatheader">Produktion', Line);
  231.     EndPos := Pos('<a name="music_original"', Line);
  232.     if EndPos = 0 then
  233.     begin
  234.     EndPos := Pos('<a name="cinematographers"', Line);
  235.     end;
  236.     Line := copy(Line, BeginPos, EndPos - BeginPos);
  237.     repeat
  238.       BeginPos := Pos('<td valign="top">', Line);
  239.       if BeginPos > 0 then
  240.       begin
  241.         Delete(Line, 1, BeginPos + 25);
  242.         TempPos := Pos('">producer</a>', Line);
  243.         if (TempPos > 0) and (TempPos < Pos('</tr>', Line)) then
  244.         begin
  245.           BeginPos := pos('">', Line) + 2;
  246.           EndPos := pos('</a>', Line);
  247.           if EndPos = 0 then
  248.             EndPos := Pos('</td>', Line);
  249.           Value := copy(Line, BeginPos, EndPos - BeginPos);
  250.           if FullValue <> '' then
  251.             FullValue := FullValue + ', ';
  252.           FullValue := FullValue + Value;
  253.           EndPos := Pos('</td></tr>', Line);
  254.           Delete(Line, 1, EndPos);
  255.         end;
  256.       end else
  257.       begin
  258.         Line := '';
  259.       end;
  260.     until Line = '';
  261.     HTMLDecode(FullValue);
  262.     SetField(fieldProducer, FullValue);
  263.   end;
  264. end;
  265.  
  266. procedure AnalyseIMDBPage(Page: TStringList);
  267. var
  268.   Line, Value, Value2, FullValue: string;
  269.   BeginPos, EndPos, LineNr: Integer;
  270. begin
  271.  
  272.   // Original Title & Year
  273.   Page.Text := GetPage(IMDbURL);
  274.   LineNr := FindLine('<title>', Page, 0);
  275.   Line := Page.GetString(LineNr);
  276.   if LineNr > -1 then
  277.   begin
  278.     BeginPos := pos('<title>', Line);
  279.     if BeginPos > 0 then
  280.       BeginPos := BeginPos + 7;
  281.       EndPos := pos('(', Line);
  282.     if EndPos = 0 then
  283.       EndPos := Length(Line);
  284.     Value := copy(Line, BeginPos, EndPos - BeginPos - 1);
  285.     HTMLDecode(Value);
  286.     SetField(fieldOriginalTitle, Value);
  287.     BeginPos := pos('(', Line) + 1;
  288.     if BeginPos > 0 then
  289.     begin
  290.       EndPos := pos(')', Line);
  291.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  292.       SetField(fieldYear, Value);
  293.     end;
  294.   end;
  295.  
  296.   // Rating
  297.   LineNr := FindLine('User Rating:', Page, 0);
  298.   if LineNr > -1 then
  299.   begin
  300.       Line := Page.GetString(LineNr + 4);
  301.       if Pos('awaiting', Line) = 0 then
  302.       begin
  303.       Line := Page.GetString(LineNr + 4);
  304.       BeginPos := pos('<b>', Line) + 3;
  305.       EndPos := BeginPos + 1;
  306.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  307.       SetField(fieldRating, Value);
  308.       end;
  309.   end;
  310.  
  311.   // Director
  312.   LineNr := FindLine('Directed by', Page, 0);
  313.   if LineNr > -1 then
  314.   begin
  315.     FullValue := '';
  316.     Line := Page.GetString(LineNr + 1);
  317.     repeat
  318.       BeginPos := pos('">', Line) + 2;
  319.       EndPos := pos('</a>', Line);
  320.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  321.       if (Value <> '(more)') and (Value <> '') then
  322.       begin
  323.         if FullValue <> '' then
  324.           FullValue := FullValue + ', ';
  325.         FullValue := FullValue + Value;
  326.       end;
  327.       Delete(Line, 1, EndPos);
  328.     until Pos('</a>', Line) = 0;
  329.     HTMLDecode(FullValue);
  330.     SetField(fieldDirector, FullValue);
  331.   end;
  332.  
  333.   // Actors
  334.   LineNr := FindLine('Cast overview', Page, 0);
  335.   if LineNr = -1 then
  336.     LineNr := FindLine('cast overview', Page, 0);
  337.   if LineNr = -1 then
  338.     LineNr := FindLine('Credited cast', Page, 0);
  339.   if LineNr = -1 then
  340.     LineNr := FindLine('Complete credited cast', Page, 0);
  341.   if LineNr > -1 then
  342.   begin
  343.     FullValue := '';
  344.     Line := Page.GetString(LineNr);
  345.     repeat
  346.       BeginPos := Pos('<td valign="top">', Line);
  347.       if BeginPos > 0 then
  348.       begin
  349.         Delete(Line, 1, BeginPos);
  350.         Line := copy(Line, 25, Length(Line));
  351.         BeginPos := pos('">', Line) + 2;
  352.         EndPos := pos('</a>', Line);
  353.         if EndPos = 0 then
  354.           EndPos := Pos('</td>', Line);
  355.         Value := copy(Line, BeginPos, EndPos - BeginPos);
  356.         if (Value <> '(more)') and (Value <> '') then
  357.         begin
  358.           BeginPos := pos('.... </td><td valign="top">', Line);
  359.           if BeginPos > 0 then
  360.           begin
  361.             EndPos := pos('</td></tr>', Line);
  362.             BeginPos := BeginPos + 27;
  363.             Value2 := copy(Line, BeginPos, EndPos - BeginPos);
  364.             if Value2 <> '' then
  365.             begin
  366.               Value := Value + ' (als ' + Value2 + ')';
  367.             end;
  368.           end;
  369.           if FullValue <> '' then
  370.             FullValue := FullValue + ', ';
  371.           FullValue := FullValue + Value;
  372.         end;
  373.         EndPos := Pos('</td></tr>', Line);
  374.         Delete(Line, 1, EndPos);
  375.       end else
  376.       begin
  377.         Line := '';
  378.       end;
  379.     until Line = '';
  380.     HTMLDecode(FullValue);
  381.     SetField(fieldActors, FullValue);
  382.   end;
  383.  
  384.   //if 1 = 0 then // For de-activating english comments
  385.   begin
  386.   // Comments
  387.   LineNr := FindLine('<b>Summary:</b>', Page, 0);
  388.   if LineNr > -1 then
  389.   begin
  390.     Value := '';
  391.     repeat
  392.       LineNr := LineNr + 1;
  393.       Line := Page.GetString(LineNr);
  394.       EndPos := Pos('</blockquote>', Line);
  395.       if EndPos = 0 then
  396.         EndPos := Length(Line)
  397.       else
  398.         EndPos := EndPos - 1;
  399.       Value := Value + Copy(Line, 1, EndPos) + ' ';
  400.     until Pos('</blockquote>', Line) > 0;
  401.     HTMLDecode(Value);
  402.     Value := StringReplace(Value, '<br>', #13#10);
  403.     Value := StringReplace(Value, #13#10+' ', #13#10);
  404.     SetField(fieldComments, Value);
  405.   end;
  406.   end;
  407.  
  408.   // Length
  409.   LineNr := FindLine('Runtime:', Page, 0);
  410.   if LineNr > -1 then
  411.   begin
  412.     Line := Page.GetString(LineNr + 1);
  413.     EndPos := pos(' min', Line);
  414.     if EndPos = 0 then
  415.       EndPos := pos('  /', Line);
  416.     if EndPos = 0 then
  417.       EndPos := Length(Line);
  418.     if Pos(':', Line) < EndPos then
  419.       BeginPos := Pos(':', Line) + 1
  420.     else
  421.       BeginPos := 1;
  422.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  423.     SetField(fieldLength, Value);
  424.   end;
  425.  
  426.   // Language
  427.   LineNr := FindLine('Language:', Page, 0);
  428.   if LineNr > -1 then
  429.   begin
  430.     Line := Page.GetString(LineNr + 1);
  431.     BeginPos := pos('/">', Line) + 3;
  432.     EndPos := pos('</a>', Line);
  433.     if EndPos = 0 then
  434.       EndPos := Length(Line);
  435.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  436.     SetField(fieldLanguages, Value);
  437.   end;
  438.  
  439.   //Country
  440.   LineNr := FindLine('Country:', Page, 0);
  441.   if LineNr > -1 then
  442.   begin
  443.     Line := Page.GetString(LineNr + 1);
  444.     BeginPos := pos('/">', Line) + 3;
  445.     EndPos := pos('</a>', Line);
  446.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  447.     if pos('</a> / <a ', Line) > 2 then
  448.     begin
  449.       Line := copy(Line, pos('</a> / <a ', Line) + 8, Length(Line));
  450.       BeginPos := pos('/">', Line) + 3;
  451.       EndPos := pos('</a>', Line);
  452.       Value := Value + ' / ' + copy(Line, BeginPos, EndPos - BeginPos);
  453.     end;
  454.     HTMLDecode(Value);
  455.     SetField(fieldCountry, Value);
  456.   end;
  457.  
  458.   //Category
  459.   LineNr := FindLine('Genre:', Page, 0);
  460.   if LineNr > -1 then
  461.   begin
  462.     Line := Page.GetString(LineNr + 1);
  463.     BeginPos := pos('/">', Line) + 3;
  464.     EndPos := pos('</a>', Line);
  465.     Value := copy(Line, BeginPos, EndPos - BeginPos);
  466.     HTMLDecode(Value);
  467.     SetField(fieldCategory, Value);
  468.   end;
  469. end;
  470.  
  471. begin
  472.   if CheckVersion(3,5,0) then
  473.   begin
  474.     MovieName := GetField(fieldTranslatedTitle);
  475.     if MovieName = '' then
  476.       MovieName := GetField(fieldOriginalTitle);
  477.     if MovieName = '' then
  478.     begin
  479.       Input('OFDb', 'Bitte Titel eingeben :', MovieName)
  480.       AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
  481.     end else
  482.     begin
  483.       AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
  484.     end;
  485.   end else
  486.     ShowMessage('Dieses Script ben÷tigt eine neuere Version von Ant Movie Catalog (mindestens Version 3.5.0)');
  487. end.
  488.